// 画图
const useCanvas = async (option, that, needDesc = true) => {

	return new Promise(async (resolve, reject) => {
		try {
			const ctx = uni.createCanvasContext('shareCanvas', that);
			let width = option.width;
			let height = option.height;
			let bgUrl = await downLoadImg(option.canvasBg);
			console.log('---图片下载成功---', bgUrl, needDesc);
			if (option.title) {
				if (option.userName && option.userName.length > 4) {
					option.userName = option.userName.slice(0, 4) + '...';
				}
				let userHeaderImg = (await downLoadImg(option.userHeaderImg));
				ctx.setFillStyle('#fff');
				ctx.fillRect(0, 0, width, height);
				// 背景图
				drawImage(ctx, bgUrl, 0, 0, width, height, 0);
				// 绘制头像
				drawImage(ctx, userHeaderImg, 64, 640, 136, 136, 20);
				if (needDesc) {
					// // 绘制标题
					lineFeed(ctx, option.title.replace(/\s+/g, ''), 56, 248, 699.461, 600,
						"#333");
					// // 绘制描述
					lineFeed(ctx, option.content.replace(/\s+/g, ''), 50.461, 248, 769.461, 700,
						"#999");
				} else {
					// // 绘制标题
					lineFeed(ctx, option.title, 60.461, 248, 715.461, 600, "#333");
				}

			} else {
				ctx.setFillStyle('#fff');
				ctx.fillRect(0, 0, width, height);
				// 背景图
				drawImage(ctx, bgUrl, 0, 0, width, height, 0);
			}

			ctx.draw(false, () => {
				uni.canvasToTempFilePath({
					canvasId: 'shareCanvas',
					success(res) {
						console.log('图片绘制成功');
						resolve(res.tempFilePath)
					},
					fail(e) {
						console.error('图片绘制失败', e);
						reject('图片绘制失败')
					},
					complete(res) {
						console.log('分享图绘制之后清除画布内容', res);
						ctx.fillRect(0, 0, width, height);
						ctx.draw();
					}
				},
					that
				);
			});
		} catch (err) {
			//TODO handle the exception
			console.log('---useCanvas-e---', err);
			reject(err)
		}


	})
	// const ctx = uni.createCanvasContext('shareCanvas', that);
	// let width = option.width;
	// let height = option.height;
	// let bgUrl = await downLoadImg(option.canvasBg);
	// if (option.title) {
	// 	if (option.userName && option.userName.length > 4) {
	// 		option.userName = option.userName.slice(0, 4) + '...';
	// 	}
	// 	let userHeaderImg = (await downLoadImg(option.userHeaderImg));
	// 	ctx.setFillStyle('#fff');
	// 	ctx.fillRect(0, 0, width, height);
	// 	// 背景图
	// 	drawImage(ctx, bgUrl, 0, 0, width, height, 0);
	// 	// 绘制头像
	// 	// drawImage(ctx, userHeaderImg, 50, 465, 110, 110, 55);
	// 	drawImage(ctx, userHeaderImg, 50 / 5, 465 / 5, 110 / 5, 110 / 5, 55 / 5);
	// 	// 绘制标题
	// 	// lineFeed(ctx, option.title, 48, 200, 510, 480, "#333");
	// 	lineFeed(ctx, option.title, 48 / 5, 200 / 5, 510 / 5, 480 / 5, "#333");
	// 	// 绘制描述
	// 	// lineFeed(ctx, option.content, 40, 200, 570, 480, "#999");
	// 	lineFeed(ctx, option.content, 40 / 5, 200 / 5, 570 / 5, 480 / 5, "#999");
	// } else {
	// 	ctx.setFillStyle('#fff');
	// 	ctx.fillRect(0, 0, width, height);
	// 	// 背景图
	// 	drawImage(ctx, bgUrl, 0, 0, width, height, 0);
	// }
	// ctx.draw(false, () => {
	// 	timer = setTimeout(() => {
	// 		uni.canvasToTempFilePath({
	// 				canvasId: 'shareCanvas',
	// 				success(res) {
	// 					console.log('图片绘制成功');
	// 					callback(res.tempFilePath);
	// 				},
	// 				fail(e) {
	// 					console.log('图片绘制失败');
	// 					callback(false);
	// 				},
	// 				complete(res) {
	// 					if (timer) {
	// 						// ctx.setFillStyle('#fff');
	// 						ctx.fillRect(0, 0, width, height);
	// 						ctx.draw();
	// 						console.log('分享图绘制之后清除画布内容');
	// 						clearTimeout(timer);
	// 						timer = null;
	// 					}
	// 				}
	// 			},
	// 			that
	// 		);
	// 	}, 300);
	// });
};

function downLoadImg(netUrl) {
	return new Promise((reslove, rejected) => {
		uni.getImageInfo({
			src: netUrl, //请求的网络图片路径
			success: (res) => reslove(res.path),
			fail: rejected
		});
	});
}

const drawImage = (_ctx, url, x, y, w, h, r) => {
	if (r) {
		roundClip(_ctx, url, x, y, w, h, r);
	} else {
		_ctx.drawImage(url, x, y, w, h);
	}
};

const roundClip = (_ctx, url, x, y, w, h, r) => {
	_ctx.save();
	if (w < 2 * r) {
		r = w / 2;
	}
	if (h < 2 * r) {
		r = h / 2;
	}
	_ctx.beginPath();
	_ctx.moveTo(x + r, y);
	_ctx.arcTo(x + w, y, x + w, y + h, r);
	_ctx.arcTo(x + w, y + h, x, y + h, r);
	_ctx.arcTo(x, y + h, x, y, r);
	_ctx.arcTo(x, y, x + w, y, r);
	_ctx.clip();
	_ctx.drawImage(url, x, y, w, h);
	_ctx.restore();
};

const drawRoundRect = (_ctx, color, x, y, w, h, r, bg) => {
	if (w < 2 * r) {
		r = w / 2;
	}
	if (h < 2 * r) {
		r = h / 2;
	}
	_ctx.save();
	_ctx.beginPath();
	_ctx.setStrokeStyle(color);
	_ctx.setLineWidth(1);
	_ctx.moveTo(x + r, y);
	_ctx.arcTo(x + w, y, x + w, y + h, r);
	_ctx.arcTo(x + w, y + h, x, y + h, r);
	_ctx.arcTo(x, y + h, x, y, r);
	_ctx.arcTo(x, y, x + w, y, r);
	if (bg) {
		_ctx.setFillStyle(bg);
		_ctx.fill();
	} else {
		_ctx.stroke();
	}
	_ctx.closePath();
};

const addPrice = (_ctx, price, X, Y, w, h) => {
	_ctx.save();
	let fontSize = 16;
	_ctx.setFontSize(fontSize);
	let width = _ctx.measureText(price).width;
	let x = X + w - width - 18;
	let y = Y + h - fontSize - 14;
	let tb = 8;
	let lr = 12;
	_ctx.beginPath();
	_ctx.moveTo(x + 4, y);
	_ctx.arcTo(x + width + lr, y, x + width + lr, y + fontSize + tb, 4);
	_ctx.arcTo(x + width + lr, y + fontSize + tb, x, y + fontSize + tb, 4);
	_ctx.arcTo(x, y + fontSize + tb, x, y, 4);
	_ctx.arcTo(x, y, x + width + lr, y, 4);
	_ctx.clip();
	_ctx.setFillStyle('rgba(0, 0, 0, 0.5)');
	_ctx.fillRect(x, y, width + lr, fontSize + tb);
	_ctx.setFontSize(fontSize);
	_ctx.setFillStyle('#ffffff');
	_ctx.fillText(price, x + 6, y + 17.5);
	_ctx.restore();
};

const lineFeed = (_ctx, value, fontSize, x, y, max, color) => {
	_ctx.setFillStyle(color || '#333333');
	_ctx.setFontSize(fontSize || 12);
	let chr = value.split(''); //这个方法是将一个字符串分割成字符串数组

	let temp = '';
	let row = [];
	for (let a = 0; a < chr.length; a++) {
		if (_ctx.measureText(temp).width < max) {
			temp += chr[a];
		} else {
			a--;
			row.push(temp);
			temp = '';
		}
	}
	row.push(temp);
	if (row.length >= 2) {
		let rowCut = row.slice(0, 1);
		let rowPart = rowCut[0];
		let test = '';
		let empty = [];
		for (var a = 0; a < rowPart.length; a++) {
			if (_ctx.measureText(test).width < max) {
				test += rowPart[a];
			} else {
				break;
			}
		}
		empty.push(test);
		let newStr = empty[0].length > 10 ? empty[0].substring(0, 10) + '...' : empty[0];
		rowCut.splice(0, 1, newStr);
		row = rowCut;
	}
	for (let b = 0; b < row.length; b++) {
		_ctx.fillText(row[b], x, y + b * fontSize * 1.8);
	}
};

const getImageInfo = async (list) => {
	let index = 0;
	let itemPic = [];
	console.log('------list------', list)
	return new Promise((resolve, reject) => {
		(function imageInfo(list) {
			if (index < list.length) {
				uni.getImageInfo({
					src: list[index],
					success: (res) => {
						itemPic.push(res);
						index++;
						imageInfo(list);
					},
					fail: (err) => {
						console.log('图片信息获取失败', err);
						reject(err)
					}
				});
			} else {
				resolve(itemPic);
			}
		})(list);
	});
};

export {
	useCanvas,
	getImageInfo
};